//#include <base.js>
/*
 *  olExtensions
 *  
 *  Estensioni delle classi Openlayers
 *  
 */	


/*
 *  Metodo: loadGeoJSON 
 *  
 *  Estensione della classe OpenLayers.Layer.Vector
 *  
 *  Carica le feature di un GeoJSON in un layer di tipo OpenLayers.Layer.Vector
 *  
 *  Parametri:
 *  geoJSON - oggetto GeoJSON da caricare oppure url di un file contenente l'oggetto
 *  
 *  TODO: gestire la possibilita' di caricare il json da un file esterno di cui viene fornita la url
 *  parametro geoJSON se stringa --> url altrimenti oggetto GeoJSON
 *  
 *  TODO: gestire la strategia di cluster
 *  
 */	
OpenLayers.Layer.Vector.prototype.loadGeoJSON = function (geoJSON) {
	if (CWN2.base.DEBUG) {
		console.log('Openlayers.Layer.Vector.loadGeoJSON');
	}

	//TODO: gestire clustering
	//this.strategies = [new OpenLayers.Strategy.Cluster({distance:42})];

	//Se il protocollo e' impostato e il formato del protocollo non e' GeoJSON ritorno
	if (this.protocol && this.protocol.format.CLASS_NAME !== 'OpenLayers.Format.GeoJSON') {
		if (CWN2.base.DEBUG) {
			console.log('Layer non GeoJSON');
		}
		return;
	}

	// se parametro geoJSON e' una stringa lo interpreto come la url del file contenente il json
	// TODO non testato - sincrono?
	if (typeof geoJSON === 'string') {
		geoJSON = CWN2.json.load(geoJSON,true);
	}
	
	// definisco il formato
	var format_geojson = new OpenLayers.Format.GeoJSON({
	  'internalProjection': new OpenLayers.Projection(this.map.projection),
	  'externalProjection': this.projection
	});

	// deserializzo il json nelle feature	
	var museiFeatureCollection = format_geojson.read(geoJSON);
	 
	// carico le feature sul layer
	this.addFeatures(museiFeatureCollection);	
	
	// faccio lo zoom sugli elementi caricati
	this.map.zoomToExtent(this.getDataExtent(),false);
};

OpenLayers.Layer.Vector.prototype.zoomToSelected = function () {
	if (CWN2.base.DEBUG) {
		console.log('Openlayers.Layer.Vector.zoomToSelected');
	}

	var fts = this.selectedFeatures;
	var max = fts.length;
	var i;
	var bounds = fts[0].geometry.getBounds().clone();
	 
	for(i = 1; i < max; i++) {
			    bounds.extend(fts[i].geometry.getBounds());
	}
	
	this.map.zoomToExtent(bounds,false);
};


